﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using TCC_Hotel.Serviços.BDServices;
using TCC_Hotel.Entidades;

namespace TCC_Hotel.Apresentacao.Gerencia
{
    public partial class GerenciarPermissoes : System.Web.UI.Page
    {
        FuncionarioService servico_Funcionario = new FuncionarioService();
        LoginService servico_Login = new LoginService();

        /// <summary>
        /// Carregamento da página
        /// </summary>
        protected void Page_Load(object sender, EventArgs e)
        {
            
            //Recupera o usuario corrente
            string usuario = Request.ServerVariables["AUTH_USER"].ToString();
            LoginService servico_Login = new LoginService();
            //Verifica permissao ao acesso da página
            if (!servico_Login.RecuperarPermissaoCache(usuario).Gerenciar_Permissoes)
            {
                //Redireciona para a pagina inicial
                Response.Redirect("~/");
            }

            if (!IsPostBack)
            {
                //popular o dropdown de usuarios
                ddlUsuarios.DataSource = servico_Funcionario.ListarFuncionariosAtivosCache();
                ddlUsuarios.DataTextField = "Usuario";
                ddlUsuarios.DataValueField = "Usuario";
                ddlUsuarios.DataBind();

                ddlUsuarios_SelectedIndexChanged(null, null);
            }
        }

        /// <summary>
        /// Evento de click do botão de salvar
        /// </summary>
        protected void btnSalvar_Click(object sender, EventArgs e)
        {
            
            Permissao Permissao = new Permissao()
                 {
                     Usuario = ddlUsuarios.SelectedValue,
                     Cadastrar_Compra = ckbCadastrarCompra.Checked,
                     Listar_Estoque = ckbListarEstoque.Checked,
                     Editar_Estoque = ckbEditarQuantidade.Checked,
                     Listar_Apartamento = ckbLeituraApartamentos.Checked,
                     Cadastrar_Apartamento = ckbTotalApartamentos.Checked,
                     Listar_Empresas = ckbLeituraEmpresas.Checked,
                     Cadastrar_Empresas = ckbTotalEmpresas.Checked,
                     Listar_Fornecedores = ckbLeituraFornecedores.Checked,
                     Cadastrar_Fornecedores = ckbTotalFornecedores.Checked,
                     Listar_Funcionarios = ckbListarFuncionarios.Checked,
                     Cadastrar_Funcionarios = ckbCadastrarFuncionarios.Checked,
                     Desligar_Funcionarios = ckbDesligarFuncionarios.Checked,
                     Listar_Hospedes = ckbLeituraHospedes.Checked,
                     Cadastrar_Hospedes = ckbTotalHospedes.Checked,
                     Listar_Produtos = ckbLeituraProdutos.Checked,
                     Cadastrar_Produtos = ckbTotalProdutos.Checked,
                     Reservas = ckbTotalReservas.Checked,
                     Hospedes_Presentes = ckbHospedesAgora.Checked,
                     Hospedes_Antigos = ckbHospedesAntigos.Checked,
                     Cadastrar_Vendas = ckbTotalVendas.Checked,
                     Gerenciar_Permissoes = ckbGerenciarPermissoes.Checked,
                     Gerenciar_Parametros = ckbGerenciarParametros.Checked,
                     Gerenciar_Outras = ckbGerenciarPrecos.Checked,
                     Gerenciar_Receitas = ckbGerenciarReceitas.Checked
                 };

            //chama o serviço que edita as permissoes dos usuarios no banco
            if (servico_Login.EditarPermissoes(Permissao))
            {
                MensagemJS("Permissões do usuário editadas com sucesso");

                //limpa o cache existente 
                HttpContext.Current.Cache.Remove("Lista_Permissao");
                
            }
            else
            {
                MensagemJS("ERRO: Ocorreu um erro e as permissões não foram editadas!");
                return;
            }

        }

        /// <summary>
        /// Evento de click de mudança do dropdown de usuarios
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void ddlUsuarios_SelectedIndexChanged(object sender, EventArgs e)
        {
            //recupera as permissoes do primeiro usuario
            Permissao permissaoUsuario = servico_Login.RecuperarPermissaoCache(ddlUsuarios.SelectedValue);

            // permissoes de Estoque
            #region Estoque
            if (permissaoUsuario.Listar_Estoque)
            {
                ckbControleEstoque.Checked = true;
                lblCadastrarCompra.Visible = true;
                ckbCadastrarCompra.Visible = true;
                lblListarEstoque.Visible = true;
                ckbListarEstoque.Visible = true;
                lblEditarQuantidade.Visible = true;
                ckbEditarQuantidade.Visible = true;
            }
            else
            {
                ckbControleEstoque.Checked = false;
                lblCadastrarCompra.Visible = false;
                ckbCadastrarCompra.Visible = false;
                lblListarEstoque.Visible = false;
                ckbListarEstoque.Visible = false;
                lblEditarQuantidade.Visible = false;
                ckbEditarQuantidade.Visible = false;

            }

            ckbCadastrarCompra.Checked = permissaoUsuario.Cadastrar_Compra;
            ckbListarEstoque.Checked = permissaoUsuario.Listar_Estoque;
            ckbEditarQuantidade.Checked = permissaoUsuario.Editar_Estoque;

            #endregion
            
            // permissoes de Apartamentos
            #region Apartamentos
            
            if (permissaoUsuario.Listar_Apartamento)
            {
                ckbApartamentos.Checked = true;
                lblTotalApartamentos.Visible = true;
                ckbTotalApartamentos.Visible = true;
                lblLeituraApartamentos.Visible = true;
                ckbLeituraApartamentos.Visible = true;
            }
            else
            {
                ckbApartamentos.Checked = false;
                lblTotalApartamentos.Visible = false;
                ckbTotalApartamentos.Visible = false;
                lblLeituraApartamentos.Visible = false;
                ckbLeituraApartamentos.Visible = false;

            }


            ckbTotalApartamentos.Checked = permissaoUsuario.Cadastrar_Apartamento;
            ckbLeituraApartamentos.Checked = permissaoUsuario.Listar_Apartamento;
           
           #endregion

            // permissoes de Empresas
            #region Empresas

            if (permissaoUsuario.Listar_Empresas)
            {
                ckbEmpresas.Checked = true;
                lblTotalEmpresas.Visible = true;
                ckbTotalEmpresas.Visible = true;
                lblLeituraEmpresas.Visible = true;
                ckbLeituraEmpresas.Visible = true;
                ckbLeituraEmpresas.Checked = true;
            }
            else
            {
                ckbEmpresas.Checked = false;
                lblTotalEmpresas.Visible = false;
                ckbTotalEmpresas.Visible = false;
                lblLeituraEmpresas.Visible = false;
                ckbLeituraEmpresas.Visible = false;

            }

            ckbTotalEmpresas.Checked = permissaoUsuario.Cadastrar_Empresas;
            ckbLeituraEmpresas.Checked = permissaoUsuario.Listar_Empresas;          

            #endregion

            // permissoes de Fornecedores
            #region Fornecedores
            if (permissaoUsuario.Listar_Fornecedores)
            {
                ckbFornecedores.Checked = true;
                lblTotalFornecedores.Visible = true;
                ckbTotalFornecedores.Visible = true;
                lblLeituraFornecedores.Visible = true;
                ckbLeituraFornecedores.Visible = true;
                ckbLeituraFornecedores.Checked = true;
            }
            else
            {
                ckbFornecedores.Checked = false;
                lblTotalFornecedores.Visible = false;
                ckbTotalFornecedores.Visible = false;
                lblLeituraFornecedores.Visible = false;
                ckbLeituraFornecedores.Visible = false;

            }

            ckbTotalFornecedores.Checked = permissaoUsuario.Cadastrar_Fornecedores;
            ckbLeituraFornecedores.Checked = permissaoUsuario.Listar_Fornecedores;
          
            #endregion
            
            // permissoes de Funcionários
            #region Funcionarios
            
            if (permissaoUsuario.Listar_Funcionarios)
            {
                ckbFuncionarios.Checked = true;
                lblListarFuncionarios.Visible = true;
                ckbListarFuncionarios.Visible = true;
                lblCadastrarFuncionarios.Visible = true;
                ckbCadastrarFuncionarios.Visible = true;
                lblDesligarFuncionarios.Visible = true;
                ckbDesligarFuncionarios.Visible = true;
            }
            else
            {
                ckbFuncionarios.Checked = false;
                lblListarFuncionarios.Visible = false;
                ckbListarFuncionarios.Visible = false;
                lblCadastrarFuncionarios.Visible = false;
                ckbCadastrarFuncionarios.Visible = false;
                lblDesligarFuncionarios.Visible = false;
                ckbDesligarFuncionarios.Visible = false;

            }
            ckbCadastrarFuncionarios.Checked = permissaoUsuario.Cadastrar_Funcionarios;
            ckbListarFuncionarios.Checked = permissaoUsuario.Listar_Funcionarios;
            ckbDesligarFuncionarios.Checked = permissaoUsuario.Desligar_Funcionarios;
            
            #endregion

            // permissoes de Hóspedes
            #region Hospedes

            if (permissaoUsuario.Listar_Hospedes)
            {
                ckbHospedes.Checked = true;
                lblTotalHospedes.Visible = true;
                ckbTotalHospedes.Visible = true;
                lblLeituraHospedes.Visible = true;
                ckbLeituraHospedes.Visible = true;
                ckbLeituraHospedes.Checked = true;
            }
            else
            {
                ckbHospedes.Checked = false;
                lblTotalHospedes.Visible = false;
                ckbTotalHospedes.Visible = false;
                lblLeituraHospedes.Visible = false;
                ckbLeituraHospedes.Visible = false;

            }

            ckbTotalHospedes.Checked = permissaoUsuario.Cadastrar_Hospedes;
            ckbLeituraHospedes.Checked = permissaoUsuario.Listar_Hospedes;           

            #endregion

            // permissoes de Produtos
            #region Produtos

            if (permissaoUsuario.Listar_Produtos)
            {
                ckbProdutos.Checked = true;
                lblTotalProdutos.Visible = true;
                ckbTotalProdutos.Visible = true;
                lblLeituraProdutos.Visible = true;
                ckbLeituraProdutos.Visible = true;
                ckbLeituraProdutos.Checked = true;
            }
            else
            {
                ckbProdutos.Checked = false;
                lblTotalProdutos.Visible = false;
                ckbTotalProdutos.Visible = false;
                lblLeituraProdutos.Visible = false;
                ckbLeituraProdutos.Visible = false;
            }

            ckbTotalProdutos.Checked = permissaoUsuario.Cadastrar_Produtos;
            ckbLeituraProdutos.Checked = permissaoUsuario.Listar_Produtos;
           
            #endregion

            // permissoes de Reservas e hóspedes presentes
            ckbTotalReservas.Checked = permissaoUsuario.Reservas;
            ckbHospedesAgora.Checked = permissaoUsuario.Hospedes_Presentes;
            ckbHospedesAntigos.Checked = permissaoUsuario.Hospedes_Antigos;
            ckbTotalVendas.Checked = permissaoUsuario.Cadastrar_Vendas;

            // telas de gerência            
            ckbGerenciarPermissoes.Checked = permissaoUsuario.Gerenciar_Permissoes;
            ckbGerenciarParametros.Checked = permissaoUsuario.Gerenciar_Parametros;
            ckbGerenciarPrecos.Checked = permissaoUsuario.Gerenciar_Outras;
            ckbGerenciarReceitas.Checked = permissaoUsuario.Gerenciar_Receitas;

        }      

            
        /// <summary>
        /// Lança um popup em javaScript com alguma mensagem
        /// </summary>
        /// <param name="msg">Mensagem do popup</param>
        public void MensagemJS(string msg)
        {
            //Formata um alert para o usuário
            Page.ClientScript.RegisterStartupScript(

                     this.GetType(),

                     "Mensagem",

                     "$(window).load(function(){alert('" + msg + "')});",

                     true);

        }

        /// <summary>
        /// Evento de checkar checkbox
        /// </summary>
        protected void ckbControleEstoque_CheckedChanged(object sender, EventArgs e)
        {
            if (ckbControleEstoque.Checked)
            {
                lblCadastrarCompra.Visible = true;
                ckbCadastrarCompra.Visible = true;
                lblListarEstoque.Visible = true;
                ckbListarEstoque.Visible = true;
                lblEditarQuantidade.Visible = true;
                ckbEditarQuantidade.Visible = true;
                ckbListarEstoque.Checked = true;
               
            }
            else
            {
                lblCadastrarCompra.Visible = false;
                ckbCadastrarCompra.Visible = false;
                ckbCadastrarCompra.Checked = false;
                lblListarEstoque.Visible = false;
                ckbListarEstoque.Visible = false;
                ckbListarEstoque.Checked = false;
                lblEditarQuantidade.Visible = false;
                ckbEditarQuantidade.Visible = false;
                ckbEditarQuantidade.Checked = false;
                
            }
        }

        /// <summary>
        /// Evento de checkar checkbox
        /// </summary>
        protected void ckbApartamentos_CheckedChanged(object sender, EventArgs e)
        {
            if (ckbApartamentos.Checked)
            {
                lblTotalApartamentos.Visible = true;
                ckbTotalApartamentos.Visible = true;
                lblLeituraApartamentos.Visible = true;
                ckbLeituraApartamentos.Visible = true;
                ckbLeituraApartamentos.Checked = true;
            }
            else
            {
                lblTotalApartamentos.Visible = false;
                ckbTotalApartamentos.Visible = false;
                lblLeituraApartamentos.Visible = false;
                ckbLeituraApartamentos.Visible = false;
                ckbTotalApartamentos.Checked = false;
                ckbLeituraApartamentos.Checked = false;

            }
        }

        /// <summary>
        /// Evento de checkar checkbox
        /// </summary>
        protected void ckbEmpresas_CheckedChanged(object sender, EventArgs e)
        {
            if (ckbEmpresas.Checked)
            {
                lblTotalEmpresas.Visible = true;
                ckbTotalEmpresas.Visible = true;
                lblLeituraEmpresas.Visible = true;
                ckbLeituraEmpresas.Visible = true;
                ckbLeituraEmpresas.Checked = true;
            }
            else
            {
                lblTotalEmpresas.Visible = false;
                ckbTotalEmpresas.Visible = false;
                lblLeituraEmpresas.Visible = false;
                ckbLeituraEmpresas.Visible = false;
                ckbTotalEmpresas.Checked = false;
                ckbLeituraEmpresas.Checked = false;

            }
        }

        /// <summary>
        /// Evento de checkar checkbox
        /// </summary>
        protected void ckbFornecedores_CheckedChanged(object sender, EventArgs e)
        {
            if (ckbFornecedores.Checked)
            {
                lblTotalFornecedores.Visible = true;
                ckbTotalFornecedores.Visible = true;
                lblLeituraFornecedores.Visible = true;
                ckbLeituraFornecedores.Visible = true;
                ckbLeituraFornecedores.Checked = true;
            }
            else
            {
                lblTotalFornecedores.Visible = false;
                ckbTotalFornecedores.Visible = false;
                lblLeituraFornecedores.Visible = false;
                ckbLeituraFornecedores.Visible = false;
                ckbTotalFornecedores.Checked = false;
                ckbLeituraFornecedores.Checked = false;

            }
        }

        /// <summary>
        /// Evento de checkar checkbox
        /// </summary>
        protected void ckbFuncionarios_CheckedChanged(object sender, EventArgs e)
        {
            if (ckbFuncionarios.Checked)
            {
                lblListarFuncionarios.Visible = true;
                ckbListarFuncionarios.Visible = true;
                lblCadastrarFuncionarios.Visible = true;
                ckbCadastrarFuncionarios.Visible = true;
                lblDesligarFuncionarios.Visible = true;
                ckbDesligarFuncionarios.Visible = true;
                ckbListarFuncionarios.Checked = true;
            }
            else
            {
                lblListarFuncionarios.Visible = false;
                ckbListarFuncionarios.Visible = false;
                lblCadastrarFuncionarios.Visible = false;
                ckbCadastrarFuncionarios.Visible = false;
                lblDesligarFuncionarios.Visible = false;
                ckbDesligarFuncionarios.Visible = false;
                ckbListarFuncionarios.Checked = false;
                ckbCadastrarFuncionarios.Checked = false;
                ckbDesligarFuncionarios.Checked = false;

            }
        }

        /// <summary>
        /// Evento de checkar checkbox
        /// </summary>
        protected void ckbHospedes_CheckedChanged(object sender, EventArgs e)
        {
            if (ckbHospedes.Checked)
            {
                lblTotalHospedes.Visible = true;
                ckbTotalHospedes.Visible = true;
                lblLeituraHospedes.Visible = true;
                ckbLeituraHospedes.Visible = true;
                ckbLeituraHospedes.Checked = true;
            }
            else
            {
                lblTotalHospedes.Visible = false;
                ckbTotalHospedes.Visible = false;
                lblLeituraHospedes.Visible = false;
                ckbLeituraHospedes.Visible = false;
                ckbTotalHospedes.Checked = false;
                ckbLeituraHospedes.Checked = false;

            }
        }

        /// <summary>
        /// Evento de checkar checkbox
        /// </summary>
        protected void ckbProdutos_CheckedChanged(object sender, EventArgs e)
        {
            if (ckbProdutos.Checked)
            {
                lblTotalProdutos.Visible = true;
                ckbTotalProdutos.Visible = true;
                lblLeituraProdutos.Visible = true;
                ckbLeituraProdutos.Visible = true;
                ckbLeituraProdutos.Checked = true;
            }
            else
            {
                lblTotalProdutos.Visible = false;
                ckbTotalProdutos.Visible = false;
                lblLeituraProdutos.Visible = false;
                ckbLeituraProdutos.Visible = false;
                ckbTotalProdutos.Checked = false;
                ckbLeituraProdutos.Checked = false;

            }
        }

       
    }
}